Transports, upgrades, multiplexing and node handling of *libp2p*.
The main concepts of libp2p-core are:
- The [`Transport`] trait defines how to reach a remote node or listen for
incoming remote connections. See the [`transport`] module.
- The [`StreamMuxer`] trait is implemented on structs that hold a connection
to a remote and can subdivide this connection into multiple substreams.
See the [`muxing`] module.
- The [`UpgradeInfo`], [`InboundUpgrade`] and [`OutboundUpgrade`] traits
define how to upgrade each individual substream to use a protocol.
See the `upgrade` module.